// 用户认证和状态管理工具

/**
 * 用户信息接口
 */
export interface UserInfo {
  userId: string
  nickName: string
  avatar?: string
  status: number // 1-在线, 0-离线
  email?: string
}

/**
 * 认证工具类
 */
export class AuthUtils {
  private static readonly TOKEN_KEY = 'token'
  private static readonly USER_INFO_KEY = 'userInfo'
  
  /**
   * 保存用户登录信息
   */
  static saveUserInfo(token: string, userInfo: UserInfo) {
    try {
      uni.setStorageSync(this.TOKEN_KEY, token)
      uni.setStorageSync(this.USER_INFO_KEY, userInfo)
      console.log('用户信息保存成功')
    } catch (error) {
      console.error('保存用户信息失败:', error)
    }
  }
  
  /**
   * 获取存储的token
   */
  static getToken(): string | null {
    try {
      return uni.getStorageSync(this.TOKEN_KEY) || null
    } catch (error) {
      console.error('获取token失败:', error)
      return null
    }
  }
  
  /**
   * 获取存储的用户信息
   */
  static getUserInfo(): UserInfo | null {
    try {
      const userInfo = uni.getStorageSync(this.USER_INFO_KEY)
      return userInfo || null
    } catch (error) {
      console.error('获取用户信息失败:', error)
      return null
    }
  }
  
  /**
   * 检查用户是否已登录
   */
  static isLoggedIn(): boolean {
    const token = this.getToken()
    const userInfo = this.getUserInfo()
    return !!(token && userInfo)
  }
  
  /**
   * 清除用户登录信息
   */
  static clearUserInfo() {
    try {
      uni.removeStorageSync(this.TOKEN_KEY)
      uni.removeStorageSync(this.USER_INFO_KEY)
      console.log('用户信息清除成功')
    } catch (error) {
      console.error('清除用户信息失败:', error)
    }
  }
  
  /**
   * 用户登出
   */
  static logout() {
    this.clearUserInfo()
    
    // 跳转到登录页面
    uni.reLaunch({
      url: '/pages/login'
    })
  }
  
  /**
   * 检查登录状态，如果未登录则跳转到登录页
   */
  static checkLoginStatus(): boolean {
    if (!this.isLoggedIn()) {
      uni.showToast({
        title: '请先登录',
        icon: 'none'
      })
      
      setTimeout(() => {
        uni.reLaunch({
          url: '/pages/login'
        })
      }, 1500)
      
      return false
    }
    return true
  }
  
  /**
   * 更新用户信息
   */
  static updateUserInfo(newUserInfo: Partial<UserInfo>) {
    const currentUserInfo = this.getUserInfo()
    if (currentUserInfo) {
      const updatedUserInfo = { ...currentUserInfo, ...newUserInfo }
      uni.setStorageSync(this.USER_INFO_KEY, updatedUserInfo)
    }
  }
  
  /**
   * 获取请求头中的Authorization
   */
  static getAuthHeader(): Record<string, string> {
    const token = this.getToken()
    return token ? { 'Authorization': `Bearer ${token}` } : {}
  }
}

/**
 * 页面权限检查装饰器/函数
 * 在需要登录的页面中调用此函数
 */
export function requireAuth(): boolean {
  return AuthUtils.checkLoginStatus()
}

/**
 * 用户状态枚举
 */
export enum UserStatus {
  OFFLINE = 0, // 离线
  ONLINE = 1,  // 在线
  BUSY = 2,    // 忙碌
  AWAY = 3     // 离开
}

/**
 * 获取用户状态文本
 */
export function getUserStatusText(status: number): string {
  switch (status) {
    case UserStatus.ONLINE:
      return '在线'
    case UserStatus.BUSY:
      return '忙碌'
    case UserStatus.AWAY:
      return '离开'
    case UserStatus.OFFLINE:
    default:
      return '离线'
  }
}

/**
 * 获取用户状态颜色
 */
export function getUserStatusColor(status: number): string {
  switch (status) {
    case UserStatus.ONLINE:
      return '#52c41a' // 绿色
    case UserStatus.BUSY:
      return '#ff4d4f' // 红色
    case UserStatus.AWAY:
      return '#faad14' // 黄色
    case UserStatus.OFFLINE:
    default:
      return '#d9d9d9' // 灰色
  }
}